<!-- vuex 中原生方法的使用 -->

<template>
  <div class="box">
    <h2>Son1 子组件</h2>
    从vuex中获取的值: <label>{{ $store.state.count }}</label>
    <br>
    <button @click="handleAdd(1)">值 + 1</button>
    <button @click="handleAdd(5)">值 + 5</button>
    <button @click="handleAdd(10)">值 + 10</button>
    <button @click="handleChange">一秒后修改成666</button>
    <button @click="changeFn">改标题</button>
    <hr style="border: 1px dashed #000; width: 100%;height: 1px;"/>
    <div>{{ $store.state.list }}</div>
    <div>{{ $store.getters.filterList }}</div>
    <hr>
    <!-- 分模块下，使用数据/方法 -->
    <!-- 1.测试访问<模块中>的 state -->
    <!-- 此时是挂载到根 state 中的 -->
    <div>{{ $store.state.user.userInfo.name }}</div>
    <!-- 3.测试访问<模块中>的 mutations -->
    <button @click="updateUser">更新个人信息</button>
    <!-- 4.测试访问<模块中>的 actions -->
    <button @click="asyncUpdateUser">一秒后更新个人信息</button>
    <div>{{ $store.state.setting.theme }}</div>
    <button @click="updateTheme">更新主题</button>
    <button @click="asyncUpdateTheme">一秒后更新信息</button>
    <hr style="border: 1px dashed #000; width: 100%;height: 1px;"/>
    <!-- 2.测试访问<模块中>的 getters -->
    <!-- 这时的 getters 里面多出来一个 user/UpperCaseName 此时就需要通过 "" 将他变成一个字符串，使用 obj[] 获取  -->
    <div>{{ $store.getters["user/UpperCaseName"] }}</div>
  </div>
</template>

<script>
export default {
  name: 'Son1Com',
  created () {
    console.log(this.$store.getters)
  },
  methods: {
    handleAdd (n) {
      console.log(n)
      // 调用带参数的 mutations 函数
      this.$store.commit('addCount', {
        count: n,
        msg: '哇哇哇'
      })
    },
    changeFn () {
      this.$store.commit('changeTitle', '哈哈哈')
    },
    handleChange () {
      this.$store.dispatch('changeCountAction', 666)
    },
    updateUser () {
      this.$store.commit('user/setUser', {
        name: 'lisi',
        age: 20
      })
    },
    updateTheme () {
      this.$store.commit('setting/setTheme', 'pink')
    },
    asyncUpdateUser () {
      this.$store.dispatch('user/asyncSetUserSecond', {
        name: 'wangwu',
        age: 30
      })
    },
    asyncUpdateTheme () {
      this.$store.dispatch('setting/asyncUpdateThemeSecond', 'red')
    }
  }
}
</script>

<style lang="css" scoped>
.box {
  border: 3px solid #ccc;
  width: 400px;
  padding: 10px;
  margin: 20px;
}

h2 {
  margin-top: 10px;
}
</style>
